﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Espam.Idiomas.Decimo.Tesis.Negocio;
using System.Data;
using System.Data.OleDb;
using System.IO;
using System.Drawing;

namespace Espam.Idiomas.Decimo.Tesis.Web
{
    public partial class UI_UploadScores : System.Web.UI.Page
    {
        string validaSession = "";
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!Page.IsPostBack)
            {
                Response.Cache.SetCacheability(HttpCacheability.ServerAndNoCache);
                Response.Cache.SetAllowResponseInBrowserHistory(false);
                Response.Cache.SetNoStore();

                if (Session["userEspamIdiomasVarSession001"] == null || Session["rolEspamIdiomasVarSession003"] == null)
                {
                    validaSession = "NoHaIniciadoSession";
                    Response.Redirect("UI_Login.aspx?validaSession=" + validaSession);
                }
                else if (Session["userEspamIdiomasVarSession001"] != null && Session["rolEspamIdiomasVarSession003"].ToString() == "Docente")
                {
                    CargarDdlNiveles();
                    ddlNivel.AutoPostBack = true;
                    ddlHorario.AutoPostBack = true;
                }
                else if (Session["userEspamIdiomasVarSession001"] != null && Session["rolEspamIdiomasVarSession003"].ToString() == "Administradores")
                {
                    Response.Redirect("Default.aspx");
                }
                else if (Session["userEspamIdiomasVarSession001"] != null && Session["rolEspamIdiomasVarSession003"].ToString() == "Alumno")
                {
                    Response.Redirect("UI_DashboardStudents.aspx");
                }
            }

        }

        private void CargarDdlNiveles()
        {
            ListadoNiveles oListados = new ListadoNiveles();
            List<Nivel> lista = new List<Nivel>();
            oListados.idDocente = (int)Session["idDocenteEspamIdiomasVarSession009"];
            lista = oListados.ConsultarListaNivelDisponibles();
            if (lista.Count == 0)
            {
                idMensajeListas.Visible = true;
                lblMensajeErrorListaEstudiantes.Text = "SIN MÓDULOS ASIGNADOS HASTA EL MOMENTO";
                tdNivel.Visible = false;
                ddlNivel.Visible = false;
            }
            else
            {
                lista.Insert(0, new Nivel() { nivel = 0, equivalente = "<elige un nivel>" });
                ddlNivel.DataSource = lista;
                ddlNivel.DataTextField = "equivalente";
                ddlNivel.DataValueField = "nivel";
                ddlNivel.DataBind();
                idMensajeListas.Visible = false;
                lblMensajeErrorListaEstudiantes.Text = "";
            }

        }
        private void cargarDdlHorarios()
        {
            List<Horarios> lista = new List<Horarios>();
            ListadoHorarios oListadosH = new ListadoHorarios();
            oListadosH.idDocente = (int)Session["idDocenteEspamIdiomasVarSession009"];
            oListadosH.nivel = int.Parse(ddlNivel.SelectedValue);
            lista = oListadosH.getHorariosListabyDocente();
            lista.Insert(0, new Horarios() { idModulo = 0, horario = "<elige un horario>" });
            ddlHorario.DataSource = lista;
            ddlHorario.DataTextField = "horario";
            ddlHorario.DataValueField = "idModulo";
            ddlHorario.DataBind();
        }

        private void cargarGridListaDocentes()
        {
            Usuarios oUsu = new Usuarios();
            oUsu.idDocente = (int)Session["idDocenteEspamIdiomasVarSession009"];
            oUsu.nivel = int.Parse(ddlNivel.SelectedValue);
            oUsu.idHorario = int.Parse(ddlHorario.SelectedValue);
            gvListaDocentes.DataSource = oUsu.GetListaEstudiantesByDocente();
            gvListaDocentes.DataBind();
        }

        protected void ddlNivel_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (ddlNivel.SelectedIndex == 0)
            {
                filaAceptar.Visible = false;
                ddlHorario.Visible = false;
                tdHorario.Visible = false;
                tableListaGeneradaEstudiantes.Visible = false;
                VaciaGvCalificaciones();
            }
            else
            {
                btnGenerarLista.Text = "Generar Lista";
                cargarDdlHorarios();
                tableListaGeneradaEstudiantes.Visible = false;
                ddlHorario.Visible = true;
                tdHorario.Visible = true;
                VaciaGvCalificaciones();
            }
        }
        private void VaciaGvCalificaciones()
        {
            gvCalificacionesExcel.DataSource = null;
            gvCalificacionesExcel.DataBind();
            trGuardarCalificaciones.Visible = false;
        }
        protected void ddlHorario_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (ddlHorario.SelectedIndex == 0)
            {
                filaAceptar.Visible = false;
                tableListaGeneradaEstudiantes.Visible = false;
                VaciaGvCalificaciones();
            }
            else
            {
                btnGenerarLista.Text = "Generar Lista";
                filaAceptar.Visible = true;
                tableListaGeneradaEstudiantes.Visible = false;
                VaciaGvCalificaciones();
            }
        }

        protected void btnCancelar_Click(object sender, EventArgs e)
        {
            Response.Redirect("UI_UploadScores.aspx");
        }

        protected void btnGenerarLista_Click(object sender, EventArgs e)
        {

            if (ddlHorario.SelectedIndex == 0 || ddlNivel.SelectedIndex == 0)
            {

            }
            else
            {
                if (btnGenerarLista.Text == "Exportar a excel")
                {
                                       
                }
                else
                {
                    cargarGridListaDocentes();
                    //lblvalida.Visible = true;
                    //lblvalida.Text = gvListaDocentes.Rows.Count.ToString();
                    tableListaGeneradaEstudiantes.Visible = true;
                    trUpload.Visible = true;
                    VaciaGvCalificaciones();
                }
            }
        }

        protected void btnUpload_Click(object sender, EventArgs e)
        {
            try
            {
                if (fuCalifîcaciones.HasFile)
                {
                    //Coneection String by default empty  
                    string ConStr = "";
                    //Extantion of the file upload control saving into ext because   
                    //there are two types of extation .xls and .xlsx of Excel   
                    string ext = Path.GetExtension(fuCalifîcaciones.FileName).ToLower();
                    //getting the path of the file   
                    string path = Server.MapPath("~/Scores/" + fuCalifîcaciones.FileName);
                    //saving the file inside the MyFolder of the server  
                    fuCalifîcaciones.SaveAs(path);
                    lblvalida.Text = fuCalifîcaciones.FileName + "\'s Data showing into the GridView";
                    //checking that extantion is .xls or .xlsx  
                    if (ext.Trim() == ".xls" || ext.Trim() == ".xlsx")
                    {
                        if (ext.Trim() == ".xls")
                        {
                            //connection string for that file which extantion is .xls  
                            ConStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + path + ";Extended Properties=\"Excel 8.0;HDR=Yes;IMEX=2\"";
                        }
                        else if (ext.Trim() == ".xlsx")
                        {
                            //connection string for that file which extantion is .xlsx  
                            ConStr = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + path + ";Extended Properties=\"Excel 12.0;HDR=Yes;IMEX=2\"";
                        }
                        //making query  
                        string query = "SELECT  * FROM [ListadoEstudiantes$A13:U100]";
                        //string query = "SELECT  * FROM [ListadoEstudiantes$]";
                        //Providing connection  
                        OleDbConnection conn = new OleDbConnection(ConStr);
                        //checking that connection state is closed or not if closed the   
                        //open the connection  
                        if (conn.State == ConnectionState.Closed)
                        {
                            conn.Open();
                        }

                        //create command object  
                        OleDbCommand cmd = new OleDbCommand(query, conn);
                        // create a data adapter and get the data into dataadapter  
                        OleDbDataAdapter da = new OleDbDataAdapter(cmd);
                        DataSet ds = new DataSet();
                        //fill the Excel data to data set  
                        da.Fill(ds);
                        //set data source of the grid view  
                        gvCalificacionesExcel.DataSource = ds.Tables[0];
                        //binding the gridview  
                        gvCalificacionesExcel.DataBind();
                        //close the connection  
                        conn.Close();
                        trGuardarCalificaciones.Visible = true;
                    }
                    else
                    {
                        lblvalida.Text = "FORMATO DE ARCHIVO INCORRECTO";
                        ActivaError();
                    }
                }
                else
                {
                    lblvalida.Text = "NO HA CARGADO NINGÚN ARCHIVO";
                    ActivaError();
                }
            }
            catch (Exception ex)
            {
                ScriptManager.RegisterStartupScript(this.Page, GetType(), "MostarMensaje", "mensajeMal('ERROR!! VERIFIQUE LA EXTENSIÓN DEL ARCHIVO EXCEL O ERRORES RELACIONADOS CON EL LIBRO DE EXCEL')", true);    
               
            }
           
           
        }
        protected void ActivaError()
        {
            lblvalida.Visible = true;
            lblvalida.ForeColor = Color.Red;
        }
        protected void ActivaSuccess()
        {
            lblvalida.Visible = true;
            lblvalida.ForeColor = Color.Green;
        }
        /// <summary>
        /// Guardar Notas
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void btnGuardarCambios_Click(object sender, EventArgs e)
        {
            Usuarios oUsu = new Usuarios();
            Horarios oHorarios = new Horarios();
            List<Usuarios> lista = new List<Usuarios>();
            int i=0;
            try
            {
            
            foreach (GridViewRow item in gvCalificacionesExcel.Rows)
            {
                Usuarios oUsuarios = new Usuarios();
                if ((oUsuarios.documento = gvCalificacionesExcel.Rows[i].Cells[0].Text) == "&nbsp;" || ((oUsuarios.parametro1 = float.Parse(gvCalificacionesExcel.Rows[i].Cells[3].Text)).ToString() == "nbsp;"))
                {
                    
                }
                else
                {
                    oUsuarios.documento = gvCalificacionesExcel.Rows[i].Cells[0].Text.ToString().Trim();
                    oUsuarios.parametro1 = float.Parse(gvCalificacionesExcel.Rows[i].Cells[3].Text);
                    oUsuarios.parametro2 = float.Parse(gvCalificacionesExcel.Rows[i].Cells[4].Text);
                    oUsuarios.parametro3 = float.Parse(gvCalificacionesExcel.Rows[i].Cells[5].Text);
                    oUsuarios.parametro4 = float.Parse(gvCalificacionesExcel.Rows[i].Cells[6].Text);
                    oUsuarios.examenFinal = float.Parse(gvCalificacionesExcel.Rows[i].Cells[7].Text);
                    oUsuarios.supletorio = float.Parse(gvCalificacionesExcel.Rows[i].Cells[8].Text);
                    oUsuarios.promedio = float.Parse(gvCalificacionesExcel.Rows[i].Cells[9].Text);
                    oUsuarios.estado = gvCalificacionesExcel.Rows[i].Cells[10].Text.Trim();
                    if (oUsuarios.parametro1 <= 2 && oUsuarios.parametro2 <= 2 && oUsuarios.parametro3 <= 2 && oUsuarios.parametro4 <= 2 && oUsuarios.examenFinal <= 2 && oUsuarios.supletorio <= 2)
                    {
                        lista.Add(oUsuarios);
                    }
                    
                    i++;
                }
                 
            }
            
            if (lista.Count == gvListaDocentes.Rows.Count)
            {
                oUsu.idModulo = int.Parse(ddlHorario.SelectedValue);
                string mens = oUsu.UpdateScoresAlumnos(lista);
                if (mens == "CALIFICACIONES SUBIDAS CON EXITO")
                {
                    ScriptManager.RegisterStartupScript(this.Page, GetType(), "MostarMensaje", "mensajeBien('CALIFICACIONES SUBIDAS EXITOSAMENTE')", true);
                }
                else
                {
                    ScriptManager.RegisterStartupScript(this.Page, GetType(), "MostarMensaje", "mensajeMal('ERROR AL SUBIR CALIFICACIONES REVISE ERRORES POSIBLES CON EL FORMATO DE EL ARCHIVO DE EXCEL')", true);
                }
            }
            else
            {
                ScriptManager.RegisterStartupScript(this.Page, GetType(), "MostarMensaje", "mensajeMal('VERIFIQUE QUE EL NUMERO DE REGISTROS DE EL ARCHIVO SEA IGUAL A EL NUMERO DE REGISTROS DE LA LISTA DE ESTUDIANTES')", true);
                lblvalida.Visible = true;
                lblvalida.ForeColor = Color.Red;
                lblvalida.Text="ERROR!!! VERIFIQUE EL NUMERO DE REGISTROS";
            }

            }
            catch (Exception)
            {
                ScriptManager.RegisterStartupScript(this.Page, GetType(), "MostarMensaje", "mensajeMal('ERROR AL SUBIR CALIFICACIONES REVISE ERRORES POSIBLES CAMPOS VACIOS')", true);
                lblvalida.Visible = true;
                lblvalida.ForeColor = Color.Red;
                lblvalida.Text = "ERROR!!! VERIFIQUE POSIBLES DATOS CAMPOS EN EXCEL";
            }
        }
    }
}